home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / Apps / ArchiveUtils / tar / next / level-1 < prev    next >
Encoding:
Text File  |  1992-12-20  |  5.6 KB  |  165 lines

  1. #!/bin/sh 
  2. #
  3. # Run this script as root on the machine that has the tape drive, to make a
  4. # level-1 dump containing all files changed since the last full dump.
  5. #
  6. # If you give `now' as an argument, the dump is done immediately.
  7. # Otherwise, it waits until 1am.
  8. #
  9. # You must edit the file `backup-specs' to set the parameters for your site.
  10. # Modifications by P. E. Cantrell to use remote tape from host
  11. # TAPE_HOST set in backup-specs-tape. Added variable
  12. # USERID to be the userid on the remote machine, also
  13. # set in backup-specs-tape. Also fixed problem with
  14. # >& construct in mkdir. Added new file $fsname.level-1-floppy
  15. # for use with level-2 floppy disk backups. We rewrite *.level-1-floppy
  16. # whenever we do a tape level-0 backup or a tape or floppy level-1
  17. # backup.
  18. #
  19. #set -x -v
  20. if [ ! -w / ]; then
  21.    echo The backup must be run as root,
  22.    echo or else some files will fail to be dumped.
  23.    exit 1
  24. else
  25.    false
  26. fi
  27.  
  28. # Get the values of BACKUP_DIRS and BACKUP_FILES, and other variables.
  29. . ./backup-specs-tape
  30.  
  31. # Maybe sleep until around specified or default hour.
  32. #
  33. if [ "$1" != "now" ]; then
  34.    if [ "$1"x != x ]; then
  35.       spec=$1
  36.    else
  37.       spec=$BACKUP_HOUR
  38.    fi
  39.    pausetime=`date | awk '{hr=substr($4,1,2);\\
  40.       mn=substr($4,4,2);\\
  41.       if((hr+0)<spec)\\
  42.          print 3600*(spec-hr)-60*mn;\\
  43.       else\\
  44.          print 3600*(spec+(24-hr))-60*mn; }' spec=$spec`
  45.    clear
  46.    cat ./dont_touch
  47.    sleep $pausetime
  48. fi
  49.  
  50. # start doing things
  51.  
  52. here=`pwd`
  53. LOGFILE=log-`date | awk '{print $2 "-" $3 "-" $6}'`-level-1
  54. HOST=`hostname | sed 's/\..*//'`
  55. #TAR_PART1="/usr/local/bin/tar -c +multi-volume +one-file-system +block=$BLOCKING +sparse"
  56. TAR_PART1="/usr/local/bin/tar -c +multi-volume +one-file-system +block=$BLOCKING "
  57.  
  58. # Make sure the log file did not already exist.  Create it.
  59.  
  60. if [ -f $LOGFILE ] ; then
  61.    echo Log file $LOGFILE already exists.
  62.    exit 1
  63. else
  64.    touch $LOGFILE
  65. fi
  66.  
  67. #mt -f $TAPE_FILE rewind
  68. rsh $TAPE_HOST -l $USERID mt rew
  69. if [ x != "x$BACKUP_DIRS" ] ; then
  70. set $BACKUP_DIRS
  71. while [ $# -ne 0 ] ; do
  72.    host=`echo $1 | sed 's/:.*$//'`
  73.    fs=`echo $1 | sed 's/^.*://'`
  74.    date=`date`
  75.    fsname=`echo $1 | sed 's/\//:/g'`
  76.  
  77. # This filename must be absolute; it is opened on the machine that runs tar.
  78.    TAR_PART2="+listed=/etc/tar-backup/temp.level-1"
  79.    TAR_PART3="+label='level 1 tape backup of $fs on $host at $date' -C $fs ."
  80.  
  81.    echo Backing up $1 at $date to tape | tee -a $LOGFILE
  82.    echo Last full dump on this filesystem: | tee -a $LOGFILE
  83.  
  84.    if [ $HOST != $host ] ; then
  85.      rsh $host "ls -l /etc/tar-backup/$fsname.level-0; \
  86.     cp /etc/tar-backup/$fsname.level-0 /etc/tar-backup/temp.level-1" \
  87.     2>&1 | tee -a $LOGFILE
  88.    else
  89.      ls -l /etc/tar-backup/$fsname.level-0 2>&1 | tee -a $LOGFILE
  90.      cp /etc/tar-backup/$fsname.level-0 /etc/tar-backup/temp.level-1 2>&1 | tee -a $LOGFILE
  91.    fi
  92.  
  93.    # Actually back things up.
  94.  
  95.    if [ $HOST != $host ] ; then
  96.       rsh $host $TAR_PART1 -f $USERID@$TAPE_HOST:$TAPE_FILE $TAR_PART2 \
  97.         $TAR_PART3 2>&1 | tee -a $LOGFILE
  98.    else
  99. # Using `sh -c exec' causes nested quoting and shell substitution
  100. # to be handled here in the same way rsh handles it.
  101.       sh -c "exec $TAR_PART1 -f $USERID@$TAPE_HOST:$TAPE_FILE $TAR_PART2 \
  102.          $TAR_PART3" 2>&1 | tee -a $LOGFILE
  103.    fi
  104.    if [ $? -ne 0 ] ; then
  105.       echo Backup to tape of $1 failed. | tee -a $LOGFILE
  106.       # I'm assuming that the tar will have written an empty
  107.       # file to the tape, otherwise I should do a cat here.
  108.    else
  109.       if [ $HOST != $host ] ; then
  110.     rsh $host mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/$fsname.level-1 2>&1 | tee -a $LOGFILE
  111.       else
  112.     cp /etc/tar-backup/temp.level-1 /etc/tar-backup/$fsname.level-1-floppy \           2>&1 | tee -a $LOGFILE
  113.         mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/$fsname.level-1 2>&1 | tee -a $LOGFILE
  114.       fi
  115.    fi
  116.    $TAPE_STATUS  | tee -a $LOGFILE
  117.    sleep 60
  118.    shift
  119. done
  120. else
  121.   echo No backup file systems specified | tee -a $LOGFILE
  122. fi
  123. # Dump any individual files requested.
  124.  
  125. if [ x != "x$BACKUP_FILES" ] ; then
  126.    date=`date`
  127.    TAR_PART2="+listed=/etc/tar-backup/temp.level-1"
  128.    TAR_PART3="+label='level-1 tape backup of miscellaneous \
  129. directories and files at $date'"
  130.  
  131.    echo Backing up level-1 miscellaneous directories and files at $date to tape | tee -a $LOGFILE
  132.    echo $BACKUP_FILES | tee -a $LOGFILE
  133.    echo Last full dump of these files: | tee -a $LOGFILE  
  134.    ls -l /etc/tar-backup/misc.level-0 2>&1 | tee -a $LOGFILE
  135.  
  136.    rm -f /etc/tar-backup/temp.level-1 2>&1 | tee -a $LOGFILE
  137.    cp /etc/tar-backup/misc.level-0 /etc/tar-backup/temp.level-1 2>&1 | tee -a $LOGFILE
  138.  
  139. # Using `sh -c exec' causes nested quoting and shell substitution
  140. # to be handled here in the same way rsh handles it.
  141.    sh -c "exec $TAR_PART1 -f $USERID@$TAPE_HOST:$TAPE_FILE $TAR_PART2 \
  142.     $TAR_PART3 $BACKUP_FILES" 2>&1 | tee -a $LOGFILE
  143.    if [ $? -ne 0 ] ; then
  144.      echo Backup of level-1 miscellaneous directories and files to tape failed. | tee -a $LOGFILE
  145.      # I'm assuming that the tar will have written an empty
  146.      # file to the tape, otherwise I should do a cat here.
  147.    else
  148.      cp /etc/tar-backup/temp.level-1 /etc/tar-backup/misc.level-1-floppy \
  149.         2>&1 | tee -a $LOGFILE
  150.      mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/misc.level-1 2>&1 | tee -a $LOGFILE
  151.    fi
  152.    $TAPE_STATUS | tee -a $LOGFILE
  153. else
  154.    echo No miscellaneous directories or files specified | tee -a $LOGFILE
  155.    false
  156. fi
  157.  
  158. #mt -f $TAPE_FILE rewind
  159. #mt -f $TAPE_FILE offl
  160. rsh $TAPE_HOST -l $USERID mt rew
  161.  
  162. echo Sending the dump log to $ADMINISTRATOR
  163. #cat $LOGFILE | sed -f logfile.sed > $LOGFILE.tmp
  164. /usr/ucb/mail -s "Results of level-1 tape backup on `date`" $ADMINISTRATOR < $LOGFILE
  165.